The aim of this project is tell a story about AirBnB listings through graphs in plotly package and dplyr packages in R.
Housing Crisis in Ireland is a hot topic at the moment, which is affecting vast number of people, both young and old. AirBnB is the leading short-term lease of a private property website, where individuals place their homes on AirBnB to lease it to tourists on a short-term basis.
In this report, I will be examining the impact of AirBnB on Irish Housing Crisis, by analysing AirBnB listings data by examining the RTZs from Residential Tenancies Board, Irish housing report from Daft.ie and the Homelessness Report from the Irish government.
To fully take advantage the beauty of plotly interactivity, please knit this file into a HTML file. This will allow you, as the reader, to interact with the graphs. If the project in knitted into a word document, then the graphs will not be displayed, only tables will be displayed, which were created using dplyr.
Please note: two Rmd files were submitted, one analysing AirBnB data, the other treating and extracting important information from ‘calendar.csv’. That dataset that has over 9 million rows, which affected computer run time, knitting time and code execution, so it was summarised and two datasets emerged from that dataset, which were used in this report.
Due to the 9 million rows in calendar.csv, it was decided to treat this dataset outside of this analysis due to the size of it.
Presentation
There is a huge housing crisis in Ireland, which has been defined as a shortage of affordable accommodation for renting or buying. Irish government has made attempts to reduce the housing crisis with plans of affordable and social housing, however, lobbyists criticise the government for late intervention and lack of innovative solutions. Both young adults (under 35 years old) and more older adults are worrying about not being able to afford a home because of rent prices and increasing house prices.
Rent prices all over Ireland are increasing and Irish people worry about the affordability of rent, considering in areas like Dublin, individuals can pay up to 50% of their salary for rent. This is very nerve-wracking experience for the tenants. Daft.ie is the leading property website in Ireland, which publishes reports on the Irish housing market every quarter. For this next dataset, the report Q2 2021 was used to find out the rent in each town and city in Ireland (Lyons, 2021) .
To deal with rising rents and lack of affordable rental units, the government introduced Rent Pressure Zones (RPZs). These are areas located in parts of the country where rents are highest and rising, and where households have the greatest difficulty finding affordable accommodation (Residential Tenancies Board, 2021). Currently, there are six Local Authority Areas and 48 Local Electoral Areas (LEA) which have been designated as RTZs. In these areas, the rent cannot be increased by more than general inflation. The list is available to be viewed on Residential Tenancies Board (RTB) (Residential Tenancies Board, 2021).
Due to the Irish rent prices, more and more individuals are loosing their homes and end up homeless on the streets. Some are homeless and are recoded in the data collected by the Irish government by Simon Community and Focus Ireland. However, there is a cohort of homeless people who live on couches of friends and families are not represented in the data. As the second quarter of 2021, there are over 4,000 adults homeless in Dublin. Homeless Report, which is published every month, captures homeless statistics (Department of Housing, Local Government and Heritage, 2021).
AirBnB hosts and AirBnB, itself, have been strongly criticised for the increase of listings for short-term leasing for tourism. It has been reported that over 30,000 Irish listings on the site in Ireland for short-term lease (Pope, 2021). The article from The Irish Times continues to state that nearly half of those listings are rooms in private homes and over 10,000 entire homes are available all-year-round.
There have been talks of the Irish government to “bring legislation to create new measures that would target at least some of those properties and may see them return to the long-term rental market. Any moves which curtail the availability of AirBnB in popular tourism destinations around the country are likely to have a knock-on impact on accommodation availability and prices once international tourism resumes in a significant way in the post-pandemic period” (Pope, 2021). At the start of the pandemic, figures from estate agent Sherry FitzGerald show the number of properties available for rent in Dublin rose from 1,593 in November 2019 to 3,039 by the end March 2020 (Burke-Kennedy, 2021).
A lot of thought was brought to decided how to analyse and visualise the AirBnB data to answer the research questions above, so the following questions were developed as a lens to aid answering above questions.
Dataset used about properties listed on AirBnB in Ireland up to 21st October 2021. It was downloaded from http://insideAirBnB.com/get-the-data.html (listing.csv).
Data Dictionary was summarised from https://docs.google.com/spreadsheets/d/1iWCNJcSutYqpULSQHlNyGInUvHg2BoUGoNRIGa6Szc4/edit#gid=982310896
This dataset contains information about the AirBnB Listing such as listing id, host id, name, number of reviews, daily price. More columns will be presented in Data Understanding section.
# reading the csv
df = read.csv('listings.csv')
In ‘df’ dataset, there are 25515 rows and 18 columns. Columns names are id, name, host_id, host_name, neighbourhood_group, neighbourhood, latitude, longitude, room_type, price, minimum_nights, number_of_reviews, last_review, reviews_per_month, calculated_host_listings_count, availability_365, number_of_reviews_ltm, license.
#check the class of df
class(df)
## [1] "data.frame"
#check the column names for df
colnames(df)
## [1] "id" "name"
## [3] "host_id" "host_name"
## [5] "neighbourhood_group" "neighbourhood"
## [7] "latitude" "longitude"
## [9] "room_type" "price"
## [11] "minimum_nights" "number_of_reviews"
## [13] "last_review" "reviews_per_month"
## [15] "calculated_host_listings_count" "availability_365"
## [17] "number_of_reviews_ltm" "license"
# examining the structure in df
str(df)
## 'data.frame': 25515 obs. of 18 variables:
## $ id : int 50264642 32498446 9291209 20780307 44344311 30314099 18037875 28957610 33835587 52026597 ...
## $ name : chr "Sweet Inn | Welcoming Apt. in the city center" "Modern City Cottage in Grand Canal with Peloton !" "Apt 171 Academy Building" "Double bedroom in great Dublin city location!" ...
## $ host_id : int 331327228 244182580 48242159 130234671 113530982 139583941 11436695 251996563 96407029 92009806 ...
## $ host_name : chr "Sweet Inn" "Julia" "Jason" "Michelle" ...
## $ neighbourhood_group : chr "Dublin City Council" "Dublin City Council" "Dublin City Council" "Dublin City Council" ...
## $ neighbourhood : chr "South East Inner City LEA-5" "South East Inner City LEA-5" "Ballyfermot-Drimnagh LEA-5" "Ballyfermot-Drimnagh LEA-5" ...
## $ latitude : num 53.3 53.3 53.3 53.3 53.3 ...
## $ longitude : num -6.24 -6.23 -6.38 -6.35 -6.24 ...
## $ room_type : chr "Entire home/apt" "Entire home/apt" "Private room" "Private room" ...
## $ price : int 239 363 35 47 171 40 450 500 195 95 ...
## $ minimum_nights : int 2 2 1 2 14 1 1 2 2 7 ...
## $ number_of_reviews : int 2 14 0 66 9 2 9 45 51 1 ...
## $ last_review : chr "2021-11-02" "2020-09-01" "" "2020-02-17" ...
## $ reviews_per_month : num 0.67 0.41 NA 1.4 0.6 0.05 0.21 1.19 1.62 0.75 ...
## $ calculated_host_listings_count: int 3 2 1 1 3 1 1 1 3 1 ...
## $ availability_365 : int 345 314 0 0 51 0 85 257 60 227 ...
## $ number_of_reviews_ltm : int 2 0 0 0 5 0 8 14 21 1 ...
## $ license : logi NA NA NA NA NA NA ...
# examining the top 5 rows in df
head(df)
# examining summary of all numeric columns in df
summary(df)
## id name host_id host_name
## Min. : 11532 Length:25515 Min. : 42928 Length:25515
## 1st Qu.:17633748 Class :character 1st Qu.: 32325183 Class :character
## Median :27578650 Mode :character Median : 92281905 Mode :character
## Mean :28990493 Mean :127987416
## 3rd Qu.:42452620 3rd Qu.:195689786
## Max. :53939229 Max. :436901795
##
## neighbourhood_group neighbourhood latitude longitude
## Length:25515 Length:25515 Min. :51.43 Min. :-10.540
## Class :character Class :character 1st Qu.:52.49 1st Qu.: -9.285
## Mode :character Mode :character Median :53.32 Median : -8.091
## Mean :53.16 Mean : -7.931
## 3rd Qu.:53.47 3rd Qu.: -6.286
## Max. :55.38 Max. : -6.014
##
## room_type price minimum_nights number_of_reviews
## Length:25515 Min. : 0.0 Min. : 1.000 Min. : 0.0
## Class :character 1st Qu.: 64.0 1st Qu.: 1.000 1st Qu.: 3.0
## Mode :character Median : 99.0 Median : 2.000 Median : 13.0
## Mean : 237.2 Mean : 4.699 Mean : 38.7
## 3rd Qu.: 150.0 3rd Qu.: 3.000 3rd Qu.: 45.0
## Max. :1173721.0 Max. :1125.000 Max. :1331.0
##
## last_review reviews_per_month calculated_host_listings_count
## Length:25515 Min. : 0.010 Min. : 1.000
## Class :character 1st Qu.: 0.250 1st Qu.: 1.000
## Mode :character Median : 0.720 Median : 1.000
## Mean : 1.195 Mean : 6.378
## 3rd Qu.: 1.600 3rd Qu.: 3.000
## Max. :76.130 Max. :204.000
## NA's :3339
## availability_365 number_of_reviews_ltm license
## Min. : 0.0 Min. : 0.000 Mode:logical
## 1st Qu.: 0.0 1st Qu.: 0.000 NA's:25515
## Median :145.0 Median : 2.000
## Mean :157.1 Mean : 7.093
## 3rd Qu.:308.0 3rd Qu.: 9.000
## Max. :365.0 Max. :366.000
##
| Field | Type | Description |
|---|---|---|
| id | integer | AirBnB’s unique identifier for the listing |
| name | text | Title of the property on AirBnB |
| host_id | interger | AirBnB’s unique identifier for the host |
| host_name | text | Host’s name |
| neighbourhood | text | Local Electoral Areas (LEAs) |
| neighbourhood_group | text | County or City Council |
| latitude | numeric | Uses the World Geodetic System (WGS84) projection for latitude and longitude |
| longitude | numeric | Uses the World Geodetic System (WGS84) projection for latitude and longitude |
| room_type | string | Entire house/apt, Private room, Shared room, Hotel room |
| price | currency | Daily price in local currency |
| minimum_nights | integer | minimum number of night stay for the listing (calendar rules may be different) |
| number_of_reviews | integer | The number of reviews the listing has |
| last_review | date | The date of the last/newest review |
| calculated_host_listings_count | integer | The number of listings the host has in the current scrape, in the city/region geography |
| availability_365 | integer | availability_x. The availability of the listing x days in the future as determined by the calendar. Note a listing may be available because it has been booked by a guest or blocked by the host |
| number_of_reviews_ltm | integer | The number of reviews the listing has (in the last 12 months) |
| licence | string | Unclear from data dictionary provided by AirBnB |
Dateset ‘summarise_df’ was created from ‘calendar.csv’, which was downloaded from the AirBnB website. It was downloaded from http://insideAirBnB.com/get-the-data.html (calendar.csv). This dataset is between 23rd October 2021 to 21st October 2022. This dataset states whether the AirBnB listing is available on a specific date.
To examine how this dataset was created please see Rmd file called ‘calendar_df.Rmd’
# reading the csv
summarise_df = read.csv('summarise_df.csv')
In ‘summarise_df’ dataset, there are 152798 rows and 7 columns in the dataset. Columns names are X, listing_id, month, count, min_price, mean_price, max_price.
#check the class of summarise_df
class(summarise_df)
## [1] "data.frame"
#check the column names for summarise_df
colnames(summarise_df)
## [1] "X" "listing_id" "month" "count" "min_price"
## [6] "mean_price" "max_price"
# examining the structure in summarise_df
str(summarise_df)
## 'data.frame': 152798 obs. of 7 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ listing_id: int 11532 11532 11532 11532 11532 11532 11532 11532 11532 11532 ...
## $ month : chr "January" "February" "March" "April" ...
## $ count : int 29 28 31 23 29 26 23 26 30 31 ...
## $ min_price : int 395 395 395 395 395 395 440 440 395 395 ...
## $ mean_price: num 407 408 407 411 406 ...
## $ max_price : int 440 440 440 440 440 440 480 480 440 440 ...
# examining the top 5 rows in summarise_df
head(summarise_df)
# examining summary of all numeric columns in summarise_df
summary(summarise_df)
## X listing_id month count
## Min. : 1 Min. : 11532 Length:152798 Min. : 1.00
## 1st Qu.: 38200 1st Qu.:17899075 Class :character 1st Qu.:24.00
## Median : 76400 Median :30906693 Mode :character Median :30.00
## Mean : 76400 Mean :30317477 Mean :26.24
## 3rd Qu.:114599 3rd Qu.:44672317 3rd Qu.:31.00
## Max. :152798 Max. :53939229 Max. :31.00
##
## min_price mean_price max_price
## Min. : 9.0 Min. : 9.00 Min. : 9.0
## 1st Qu.: 70.0 1st Qu.: 70.13 1st Qu.: 75.0
## Median :100.0 Median :104.00 Median :110.0
## Mean :131.7 Mean :135.45 Mean :143.5
## 3rd Qu.:150.0 3rd Qu.:157.67 3rd Qu.:166.0
## Max. :999.0 Max. :999.00 Max. :999.0
## NA's :2197 NA's :2197 NA's :2197
| Field | Type | Description |
|---|---|---|
| listing_id | integer | AirBnB’s unique identifier for the listing |
| month | date | Month of the year |
| count | integer | Number of nights available in that month |
| min_price | integer | Minimum price for that listing in that month |
| mean_price | integer | Mean price for that listing in that month |
| max_price | integer | Maximum price for that listing in that month |
Dateset ‘available_nights’ was created from ‘calendar.csv’, which was downloaded from the AirBnB website. It was downloaded from http://insideAirBnB.com/get-the-data.html (calendar.csv). This dataset is between 23rd October 2021 to 21st October 2022. This dataset states whether the AirBnB listing is available on a specific date.
To examine how this dataset was created please see Rmd file called ‘calendar_df.Rmd’
# reading the csv
available_nights_df = read.csv('available_nights_df.csv')
In ‘available_nights_df’ dataset, there are 18169 rows and 3 columns in the dataset. Columns names are X, listing_id, available_nights.
#check the class of available_nights_df
class(available_nights_df)
## [1] "data.frame"
#check the column names for available_nights_df
colnames(available_nights_df)
## [1] "X" "listing_id" "available_nights"
# examining the structure in available_nights_df
str(available_nights_df)
## 'data.frame': 18169 obs. of 3 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ listing_id : int 11532 24927 27106 36950 40176 41538 42037 43280 44077 44919 ...
## $ available_nights: int 335 53 345 349 225 225 59 111 248 365 ...
# examining the top 5 rows in available_nights_df
head(available_nights_df)
# examining summary of all numeric columns in available_nights_df
summary(available_nights_df)
## X listing_id available_nights
## Min. : 1 Min. : 11532 Min. : 1.0
## 1st Qu.: 4543 1st Qu.:18342273 1st Qu.:113.0
## Median : 9085 Median :30807557 Median :240.0
## Mean : 9085 Mean :30437729 Mean :220.7
## 3rd Qu.:13627 3rd Qu.:44500852 3rd Qu.:339.0
## Max. :18169 Max. :53939229 Max. :365.0
| Field | Type | Description |
|---|---|---|
| listing_id | integer | AirBnB’s unique identifier for the listing |
| available_nights | integer | Number of nights avaible during the year |
RTZs (RPZs) were developed by the Irish government to tackle rising rents lack of affordable rental units. These are areas located in parts of the country where rents are the highest and rising, and where households have the greatest difficulty finding affordable accommodation (Residential Tenancies Board, 2021). The csv was manually created from RTB website.
# reading the csv
rpz_df = read.csv('rent_pressure_zones.csv')
In ‘rpz_df’ dataset, there are 57 rows and 2 columns. Columns names are neighbourhood, RPZ.
#check the class of rpz_df
class(rpz_df)
## [1] "data.frame"
#check the column names for rpz_df
colnames(rpz_df)
## [1] "neighbourhood" "RPZ"
# examining the structure in rpz_df
str(rpz_df)
## 'data.frame': 57 obs. of 2 variables:
## $ neighbourhood: chr "Cork City Council" "Dublin City Council" "Dún Laoghaire-Rathdown County Council" "Fingal County Council" ...
## $ RPZ : chr " TRUE" " TRUE" " TRUE" " TRUE" ...
# examining the top 5 rows in rpz_df
head(rpz_df)
# examining summary of all numeric columns in rpz_df
summary(rpz_df)
## neighbourhood RPZ
## Length:57 Length:57
## Class :character Class :character
## Mode :character Mode :character
| Field | Type | Description |
|---|---|---|
| neighbourhood | text | LEA or County Council e.g. Kildare County Council and Naas LEA |
| rpz | logical | Stating whether the area is in RTZs (RPZ): true or false |
The website daft.ie is the leading property website in Ireland, which publishes reports on the Irish housing market every quarter. For this next dataset, the report Q2 2021 was used to find out the rent in each city and county in Ireland (Lyons, 2021). The csv was manually created from the report.
# reading the csv
rent_df = read.csv('rent_in_ireland.csv')
In ‘rent_df’ dataset, here are 28 rows and 2 columns. Columns names are county_city, rent_price_per_month.
#check the class of rent_df
class(rent_df)
## [1] "data.frame"
#check the column names for rent_df
colnames(rent_df)
## [1] "county_city" "rent_price_per_month"
# examining the structure in rent_df
str(rent_df)
## 'data.frame': 28 obs. of 2 variables:
## $ county_city : chr "Dublin City" "Cork City" "Galway City" "County Wicklow" ...
## $ rent_price_per_month: int 2000 1524 1443 1554 1482 1448 1337 1171 1117 1107 ...
# examining the top 5 rows in rent_df
head(rent_df)
# examining summary of all numeric columns in rent_df
summary(rent_df)
## county_city rent_price_per_month
## Length:28 Min. : 744.0
## Class :character 1st Qu.: 945.2
## Mode :character Median :1066.5
## Mean :1430.8
## 3rd Qu.:1363.5
## Max. :9667.0
| Field | Type | Description |
|---|---|---|
| county_city | text | County or City, e.g. County Galway and Galway City |
| rent_price_per_month | integer | Average price of a rental property in an area |
Homeless Report, which is published every month by the Irish government, captures statistics about homelessness (Department of Housing, Local Government and Heritage, 2021). The csv was manually created from this report.
# reading the csv
homelessness_df = read.csv('homeless_September_2021.csv')
In ‘homelessness_df’ dataset, there are 22 rows and 2 columns. Columns names are ï..homeless_county, number.
#check the class of homelessness_df
class(homelessness_df)
## [1] "data.frame"
#check the column names for homelessness_df
colnames(homelessness_df)
## [1] "ï..homeless_county" "number"
# examining the structure in homelessness_df
str(homelessness_df)
## 'data.frame': 22 obs. of 2 variables:
## $ ï..homeless_county: chr "Dublin" "Kildare" "Meath" "Wicklow" ...
## $ number : int 4432 122 170 32 24 12 20 33 51 231 ...
# examining the top 5 rows in homelessness_df
head(homelessness_df)
# examining summary of all numeric columns in homelessness_df
summary(homelessness_df)
## ï..homeless_county number
## Length:22 Min. : 12.0
## Class :character 1st Qu.: 33.0
## Mode :character Median : 44.0
## Mean : 287.1
## 3rd Qu.: 115.0
## Max. :4432.0
| Field | Type | Description |
|---|---|---|
| county | text | County Council e.g. Kildare meaning Co.Kildare. Some counties are grouped together. |
| number | integer | Number of homeless individuals in that county |
Column ‘month’ had to be declared a category and ordering of months had to occur.
# changing 'month' to factor
summarise_df$mmonth <- as.factor(summarise_df$month)
# changing the order of factors
summarise_df$month <- factor(summarise_df$month, levels = c("January", "February", "March","April", "May", "June","July", "August", "September","October", "November", "December"))
## 'data.frame': 25515 obs. of 18 variables:
## $ id : int 50264642 32498446 9291209 20780307 44344311 30314099 18037875 28957610 33835587 52026597 ...
## $ name : chr "Sweet Inn | Welcoming Apt. in the city center" "Modern City Cottage in Grand Canal with Peloton !" "Apt 171 Academy Building" "Double bedroom in great Dublin city location!" ...
## $ host_id : int 331327228 244182580 48242159 130234671 113530982 139583941 11436695 251996563 96407029 92009806 ...
## $ host_name : chr "Sweet Inn" "Julia" "Jason" "Michelle" ...
## $ neighbourhood_group : chr "Dublin City Council" "Dublin City Council" "Dublin City Council" "Dublin City Council" ...
## $ neighbourhood : chr "South East Inner City LEA-5" "South East Inner City LEA-5" "Ballyfermot-Drimnagh LEA-5" "Ballyfermot-Drimnagh LEA-5" ...
## $ latitude : num 53.3 53.3 53.3 53.3 53.3 ...
## $ longitude : num -6.24 -6.23 -6.38 -6.35 -6.24 ...
## $ room_type : chr "Entire home/apt" "Entire home/apt" "Private room" "Private room" ...
## $ price : int 239 363 35 47 171 40 450 500 195 95 ...
## $ minimum_nights : int 2 2 1 2 14 1 1 2 2 7 ...
## $ number_of_reviews : int 2 14 0 66 9 2 9 45 51 1 ...
## $ last_review : chr "2021-11-02" "2020-09-01" "" "2020-02-17" ...
## $ reviews_per_month : num 0.67 0.41 NA 1.4 0.6 0.05 0.21 1.19 1.62 0.75 ...
## $ calculated_host_listings_count: int 3 2 1 1 3 1 1 1 3 1 ...
## $ availability_365 : int 345 314 0 0 51 0 85 257 60 227 ...
## $ number_of_reviews_ltm : int 2 0 0 0 5 0 8 14 21 1 ...
## $ license : logi NA NA NA NA NA NA ...
License has no unique values, therefore, it was dropped from the dataset.
# examining unique values in column 'license'
unique(df$license)
## [1] NA
#examining the columns names of df to make sure 'license' is dropped
colnames(df)
## [1] "id" "name"
## [3] "host_id" "host_name"
## [5] "neighbourhood_group" "neighbourhood"
## [7] "latitude" "longitude"
## [9] "room_type" "price"
## [11] "minimum_nights" "number_of_reviews"
## [13] "last_review" "reviews_per_month"
## [15] "calculated_host_listings_count" "availability_365"
## [17] "number_of_reviews_ltm"
The minimum number of listings the host has in the current scrape, in the city/region geography 1 nights and is 204. On average, there are 6.3784049 listings per host. There are no issues with this column because the minimum of listings has to 1 (otherwise, the host has no listings on AirBnB).
summary(df$calculated_host_listings_count)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 1.000 6.378 3.000 204.000
The minimum number of reviews in the last 12 months was for an AirBnB listing is 0 nights and the maximum of number of reviews is 366. On average, in the last 12 months, there were 7.0926514 reviews per listing.
summary(df$number_of_reviews_ltm)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.000 0.000 2.000 7.093 9.000 366.000
The minimum price for an AirBnB listing is 0 and the maximum is 1331. On average, there are 38.6982951 reviews per listing.
summary(df$number_of_reviews)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 3.0 13.0 38.7 45.0 1331.0
The minimum availability for an AirBnB listing is 0 and the maximum is 365. On average, the listings are available 157.1245934 nights out of the year.
summary(df$availability_365)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.0 0.0 145.0 157.1 308.0 365.0
After much consideration, it was decided to remove ‘availability_365’. On AirBnB data dictionary, it states that ‘[the] availability of the listing x days in the future as determined by the calendar. Note a listing may be available because it has been booked by a guest or blocked by the host.’ It is very unclear what it is meant by 0 nights available.
Instead, it was decided to examine next year’s availability from available_nights_df (from 23rd October 2021 to 21st October 2022) to a more accurate reading of availability. Before changing availability column, there were 25515 rows in the dataset.
Dataset ‘df’ was merged with ‘available_nights_df’ using ‘listing_id’ in ‘available_nights_df’ and ‘id’ in ‘df’.
After merging ‘df’ dataset on the columns ‘id’ from ‘df’ dataset and ‘listing_df’ from ‘available_nights_df’ dataset, there were 18169 rows in the dataset. 7346 rows were dropped from the dataset. This would imply that the listings that are no longer available were dropped from the dataset. This was seen as important and accurate for answering the research questions because this would examine the amount of housing that will not be available to Irish tenants for long-term lease between 23rd October 2021 and 21st October 2022. It is unclear what happened to the 7346 listings on the AirBnB or why they were unavailable on the stated year. This ensures that we analyse data relevant to the upcoming year, rather than examine all the previous listings of AirBnB in Ireland.
The minimum stay for an AirBnB listing is 1 nights and the maximum of minimum nights is 1000 nights. On average, the minimum stay must be 220.65243 nights. There were 6 rows that had minimum stay over 365 nights It was assumed to be an error and were dropped from the dataset.
summary(df$minimum_nights)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.000 1.000 2.000 4.817 3.000 1000.000
The minimum price for an AirBnB listing is 9 and the maximum is 1173721. As stated above, column ‘price’ is price per day of stay. Of course, price can not be €0 and this was examined to ensure none of the rows contained ‘0’ in price. Maximum price seems to be is 1173721 per night, which seems to be inaccurate. This row was dropped from the dataset.
summary(df$price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.0 70.0 100.0 275.8 156.0 1173721.0
After dropping the outliers, there are 18162 row in ‘df’ dataset.
summary(df$price)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 9.0 70.0 100.0 211.2 156.0 21635.0
There are 4 room types: Entire rental unit, Private room, Hotel room, Shared room. However, hotels have planning permission with relevant authorities to host guests and lease rooms, therefore, hotels will be dropped from the data. Because of the small amount of shared rooms in the dataset, shared room were also dropped.
# examining room type available in Room Type
unique(df$room_type)
## [1] Entire rental unit Private room
## Levels: Entire rental unit Private room
After dropping the ‘Hotel room’ from the data, there are 17860 row in ‘df’ dataset.
Neighboourhood has some unclean data and ‘LEA’ was dropped from the values in the column.
unique(df$lea)
## [1] "Conamara North LEA"
## [2] "Sligo-Drumcliff LEA"
## [3] "Cork City North East LEA"
## [4] "Thurles LEA"
## [5] "Kilrush LEA"
## [6] "Killaloe LEA"
## [7] "South West Inner City LEA"
## [8] "Athenry-Oranmore LEA"
## [9] "Conamara South LEA"
## [10] "Carlow LEA"
## [11] "Castleknock LEA"
## [12] "Ennistimon LEA"
## [13] "Newport LEA"
## [14] "Skibbereen-West Cork LEA"
## [15] "Glenties LEA"
## [16] "Belmullet LEA"
## [17] "Kenmare LEA"
## [18] "Milford LEA"
## [19] "New Ross LEA"
## [20] "South East Inner City LEA"
## [21] "Granard LEA"
## [22] "Shannon LEA"
## [23] "Donegal LEA"
## [24] "Claremorris LEA"
## [25] "Clontarf LEA"
## [26] "Carrick-on-Shannon LEA"
## [27] "Westport LEA"
## [28] "Ratoath LEA"
## [29] "Bantry-West Cork LEA"
## [30] "Ballinamore LEA"
## [31] "Greystones LEA"
## [32] "Dungarvan LEA"
## [33] "Ballymote-Tobercurry LEA"
## [34] "Callan-Thomastown LEA"
## [35] "Killarney LEA"
## [36] "Midleton LEA"
## [37] "Wexford LEA"
## [38] "Clonmel LEA"
## [39] "Nenagh LEA"
## [40] "Loughrea LEA"
## [41] "North Inner City LEA"
## [42] "Portlaoise LEA"
## [43] "Listowel LEA"
## [44] "Portlaw-Kilmacthomas LEA"
## [45] "Corca Dhuibhne LEA"
## [46] "Cabra-Glasnevin LEA"
## [47] "Dundrum LEA"
## [48] "Ballinasloe LEA"
## [49] "Galway City Central LEA"
## [50] "Boyle LEA"
## [51] "Kimmage-Rathmines LEA"
## [52] "Cork City North West LEA"
## [53] "Ballybay-Clones LEA"
## [54] "Maynooth LEA"
## [55] "Carrickmacross-Castleblayney LEA"
## [56] "Adare-Rathkeale LEA"
## [57] "Arklow LEA"
## [58] "Lismore LEA"
## [59] "Castlecomer LEA"
## [60] "Stillorgan LEA"
## [61] "Cavan-Belturbet LEA"
## [62] "Navan LEA"
## [63] "Ashbourne LEA"
## [64] "Buncrana LEA"
## [65] "Carndonagh LEA"
## [66] "Ardee LEA"
## [67] "Wicklow LEA"
## [68] "Baltinglass LEA"
## [69] "Borris-in-Ossory -Mountmellick LEA"
## [70] "Pembroke LEA"
## [71] "Ballymun-Finglas LEA"
## [72] "Leixlip LEA"
## [73] "Ennis LEA"
## [74] "Ballina LEA"
## [75] "Newcastle West LEA"
## [76] "Castleisland LEA"
## [77] "Carrigaline LEA"
## [78] "Mallow LEA"
## [79] "Glencullen-Sandyford LEA"
## [80] "Athy LEA"
## [81] "Dún Laoghaire-Rathdown County Council"
## [82] "Gort-Kinvara LEA"
## [83] "Cobh LEA"
## [84] "Tralee LEA"
## [85] "Cappamore-Kilmallock LEA"
## [86] "Celbridge LEA"
## [87] "Bandon-Kinsale LEA"
## [88] "Tuam LEA"
## [89] "Birr LEA"
## [90] "Galway City East LEA"
## [91] "Kells LEA"
## [92] "Laytown-Bettystown LEA"
## [93] "Muinebeag LEA"
## [94] "Rush-Lusk LEA"
## [95] "Athlone LEA"
## [96] "Waterford City East LEA"
## [97] "Donaghmede LEA"
## [98] "Blackrock LEA"
## [99] "Tullow LEA"
## [100] "Tallaght Central LEA"
## [101] "Moate LEA"
## [102] "Howth-Malahide LEA"
## [103] "Mullingar LEA"
## [104] "Swords LEA"
## [105] "Naas LEA"
## [106] "Edenderry LEA"
## [107] "Kinnegad LEA"
## [108] "Sligo-Strandhill LEA"
## [109] "Tramore-Waterford City West LEA"
## [110] "Rathfarnham-Templeogue LEA"
## [111] "Rosslare LEA"
## [112] "Lifford-Stranorlar LEA"
## [113] "Castlebar LEA"
## [114] "Galway City West LEA"
## [115] "Ballyjamesduff LEA"
## [116] "Dundalk-Carlingford LEA"
## [117] "Cork City South Central LEA"
## [118] "Firhouse-Bohernabreena LEA"
## [119] "Kanturk LEA"
## [120] "Monaghan LEA"
## [121] "Clane LEA"
## [122] "Enniscorthy LEA"
## [123] "Bray East LEA"
## [124] "Killiney-Shankill LEA"
## [125] "Limerick City East LEA"
## [126] "Clondalkin LEA"
## [127] "Graiguecullen -Portarlington LEA"
## [128] "Gorey LEA"
## [129] "Roscrea-Templemore LEA"
## [130] "Ballymahon LEA"
## [131] "Dundalk South LEA"
## [132] "Fermoy LEA"
## [133] "Macroom LEA"
## [134] "Kilmuckridge LEA"
## [135] "Cashel-Tipperary LEA"
## [136] "Kilkenny LEA"
## [137] "Manorhamilton LEA"
## [138] "Tullamore LEA"
## [139] "Longford LEA"
## [140] "Tallaght South LEA"
## [141] "Limerick City North LEA"
## [142] "Cork City South East LEA"
## [143] "Artane-Whitehall LEA"
## [144] "Letterkenny LEA"
## [145] "Ballyfermot-Drimnagh LEA"
## [146] "Newbridge LEA"
## [147] "Blanchardstown-Mulhuddart LEA"
## [148] "Cork City South West LEA"
## [149] "Swinford LEA"
## [150] "Drogheda Rural LEA"
## [151] "Piltown LEA"
## [152] "Trim LEA"
## [153] "Carrick-on-suir LEA"
## [154] "Bray West LEA"
## [155] "Balbriggan LEA"
## [156] "Palmerstown-Fonthill LEA"
## [157] "Bailieborough-Cootehill LEA"
## [158] "Drogheda Urban LEA"
## [159] "Limerick City West LEA"
## [160] "Roscommon LEA"
## [161] "Kildare LEA"
## [162] "Ongar LEA"
## [163] "Waterford City South LEA"
## [164] "Cahir LEA"
## [165] "Lucan LEA"
# examining unique values in column 'council'
unique(df$council)
## [1] "Galway County Council"
## [2] "Sligo County Council"
## [3] "Cork City Council"
## [4] "Tipperary County Council"
## [5] "Clare County Council"
## [6] "Dublin City Council"
## [7] "Carlow County Council"
## [8] "Fingal County Council"
## [9] "Cork County Council"
## [10] "Donegal County Council"
## [11] "Mayo County Council"
## [12] "Kerry County Council"
## [13] "Wexford County Council"
## [14] "Longford County Council"
## [15] "Leitrim County Council"
## [16] "Meath County Council"
## [17] "Wicklow County Council"
## [18] "Waterford City And County Council"
## [19] "Kilkenny County Council"
## [20] "Laois County Council"
## [21] "Dún Laoghaire-Rathdown County Council"
## [22] "Galway City Council"
## [23] "Roscommon County Council"
## [24] "Monaghan County Council"
## [25] "Kildare County Council"
## [26] "Limerick City And County Council"
## [27] "Cavan County Council"
## [28] "Louth County Council"
## [29] "Offaly County Council"
## [30] "South Dublin County Council"
## [31] "Westmeath County Council"
A new variable ‘county’ was created from ‘neighbourhood_group’. Several counties may have two or more county or city councils such as Cork, which has two councils: Cork City Council and Cork County Council. County Galway has two councils too: Galway City Council and Galway County Council. Dublin has several councils: Fingal County Council, South Dublin County Council, Dún Laoghaire-Rathdown County Council, Dublin County Council. Some councils have two in one like Limerick City And County Council. To find out the county, string manipulation was conducted.
unique(df$county)
## [1] Galway Sligo Cork Tipperary Clare Dublin Carlow
## [8] Donegal Mayo Kerry Wexford Longford Leitrim Meath
## [15] Wicklow Waterford Kilkenny Laois Roscommon Monaghan Kildare
## [22] Limerick Cavan Louth Offaly Westmeath
## 26 Levels: Carlow Cavan Clare Cork Donegal Dublin Galway Kerry ... Wicklow
Creating a new varible ‘student_accomodation’, examining whether the ‘name’ column contains ‘student’ in the description.
Short-term lets are stays of less than 14 days at a time, for example, if you rent out your property on a booking website such as AirBnB so people can stay there for a weekend (Citizensinformation.ie, no date).
A new variable ‘term’ was created to state whether the listing is ‘short-term lease’ or ‘long-term lease’.
Homeowners in RTZs (RPZs) are required to apply for planning permission if they let out their entire home (principal private residence) for short-term lets of more than 90 days in total while they are away. Principal private residence is the place where one ordinarily live (Citizensinformation.ie, no date).
A new variable ‘threshold_day_90’ was created to state whether the listing is ‘under-90’ or ‘over-90’ days.
Creating a new variable ‘total_income’, examining the full income potential of a listings by multiplying the price by the number of nights it is available for.
summary(df$total_income)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 10007 21806 56549 38586 7896775
There are 17860 rows in the ‘df’ dataset before dropping outliers. As seen above in the histogram, there are very limited amount of properties that are above €200,000 in total income per year. It was decided to drop all rows that are over €200,000 in total income because in this project, the affordable listings are examined in relation to the Irish Housing Crisis. Only the ‘affordable’ houses will be examined. It was unclear where to make the cut-off. It was decided to make €200,000 the cut-off even though paying potential rent of €200,000 is not affordable when a tenant is competing the AirBnB prices.
After dropping all rows with total potential income from AirBnB over €200,000, there were 17577 rows in the dataset. 7938 rows were dropped from the dataset.
In ‘df’ dataset, a new column ‘county_city’ was created from ‘council’ to be the same as ‘county_city’ in ‘rent_df’.
unique(rent_df$county_city)
## [1] "Dublin City" "Cork City" "Galway City" "County Wicklow"
## [5] "County Kildare" "County Meath" "County Louth" "County Cork"
## [9] "County Westmeath" "County Waterford" "County Kilkenny" "County Laois"
## [13] "County Carlow" "County Galway" "County Offaly" "County Limerick"
## [17] "County Kerry" "County Clare" "County Wexford" "County Tipperary"
## [21] "County Monaghan" "County Sligo" "County Cavan" "County Mayo"
## [25] "County Roscommon" "County Longford" "County Donegal" "County Leitrim"
Datasets ‘df’ and ‘rent_df’ were merged on column ‘county_city’.
In ‘df’ dataset, a new variable ‘homeless_county’ was created from ‘county’ to hold the same values as ‘homeless_county’ in ‘homeless_df’ dataset. Several counties have been merged together in the report such as ‘Mayo/Roscommon’.
Datasets ‘df’ and ‘homeless_df’ were merged on column ‘homeless_county’.
Using rent_df (dataset with county or city and average rent), A new variable was calculated ‘rent_price_per_day’ which is the rent the tenant pays per day to stay in their rented property. Although this is not how this is not normally used in the renting market, this variable will be compared to the price of AirBnB, which is in ‘per day’. It was decided to find the rent per day, because not all properties are leased for 365 days a year.
It was also assumed that private rooms will cost one third of an entire house to rent, i.e. if a house’s rent is €1500, then a room to rent is €500. Although this is not the most accurate estimate, it is better than assuming that the price of a private room is the same as a rent of the whole house, i.e. €1500 for private room. This was also operated under the assumptions that all rooms in the house are the same size and have the same bathroom privileges, i.e. all en suite or all sharing.
New variable was created to examine whether the property should be rented or AirBnB listing.
Some thought was given to whether to compare AirBnB daily price and rent per day OR total income possible from AirBnB and total income from rent. Although comparing daily AirBnB and rent per day would allow to compare the income the landlord would get on per day, it does not show whether it is actually worth while listing the property on AirBnB is more profitable than renting when taking in consideration the amount of nights that the property is available. Two varialbes were developed to examine this: per day and per year.
If the AirBnB price is greater than price, then the property should be an AirBnB listing. If the AirBnB price is lower than price, then the property should be rented.
The column ‘county_city’ in ‘rpz_df’ had values which contained both values from columns ‘council’ and ‘lea’. In this case, a new column had to be created stating whether the listing is a RTZ or not.
## [1] "Cork City Council"
## [2] "Dublin City Council"
## [3] "Dún Laoghaire-Rathdown County Council"
## [4] "Fingal County Council"
## [5] "South Dublin County Council"
## [6] "Kildare County Council"
## [7] "Ballincolligâ\200“Carrigaline LEA"
## [8] "Galway City Central LEA"
## [9] "Galway City East LEA"
## [10] "Galway City West LEA"
## [11] "Celbridge-Leixlip LEA"
## [12] "Naas LEA"
## [13] "Newbridge LEA"
## [14] "Ashbourne LEA"
## [15] "Laytown-Bettystown LEA"
## [16] "Ratoath LEA"
## [17] "Bray LEA"
## [18] "Wicklow LEA"
## [19] "Cobh LEA"
## [20] "Maynooth LEA"
## [21] "Drogheda Rural LEA"
## [22] "Drogheda Urban LEA"
## [23] "Drogheda LEA"
## [24] "Greystones LEA"
## [25] "Limerick City East LEA"
## [26] "Navan LEA"
## [27] "Fermoy LEA"
## [28] "Midleton LEA"
## [29] "Athenry-Oranmore LEA"
## [30] "Gort-Kinvara LEA"
## [31] "Kilkenny LEA"
## [32] "Graiguecullen-Portarlington LEA"
## [33] "Portlaoise LEA"
## [34] "Limerick City North LEA"
## [35] "Limerick City West LEA"
## [36] "Ardee LEA"
## [37] "Dundalk-Carlingford LEA"
## [38] "Dundalk South LEA"
## [39] "Kells LEA"
## [40] "Trim LEA"
## [41] "Waterford City East LEA"
## [42] "Waterford City South LEA"
## [43] "Athlone LEA"
## [44] "Gorey LEA"
## [45] "Arklow LEA"
## [46] "Carlow LEA"
## [47] "Macroom LEA"
## [48] "Piltown LEA"
## [49] "Sligo-Strandhill LEA"
## [50] "Baltinglass LEA"
## [51] "Mallow LEA"
## [52] "Killarney LEA"
## [53] "Athy LEA"
## [54] "Tullamore LEA"
## [55] "Mullingar LEA"
## [56] "Bandon-Kinsale LEA"
Creating a new variable ‘planning_permission’ in ‘df’ dataset to examine whether planning permission is required for the AirBnB listing. As stated above, an AirBnB listings of an entire property over 90 days in RTZ requires planning permission with the local authorites. New column will state whether planning permission is required or not.
Dataset ‘df’ was merged with ‘summarise_df’ using ‘listing_id’ in ‘available_nights_df’ and ‘id’ in ‘df’.
names(large_df)
## [1] "id" "homeless_county"
## [3] "county_city" "name"
## [5] "host_id" "host_name"
## [7] "council" "lea"
## [9] "latitude" "longitude"
## [11] "room_type" "price"
## [13] "minimum_nights" "number_of_reviews"
## [15] "last_review" "reviews_per_month"
## [17] "calculated_host_listings_count" "availability_365"
## [19] "number_of_reviews_ltm" "X.x"
## [21] "available_nights" "county"
## [23] "student_accomodation" "term"
## [25] "threshold_day_90" "total_income"
## [27] "rent_price_per_month" "number"
## [29] "rent_price_per_day" "rent_price_per_year"
## [31] "per_day_rent_AirBnB" "per_year_rent_AirBnB"
## [33] "rent_pressure_zone" "planning_permission"
## [35] "X.y" "month"
## [37] "count" "min_price"
## [39] "mean_price" "max_price"
## [41] "mmonth"
names(large_df)
## [1] "id" "host_id" "room_type"
## [4] "county" "student_accomodation" "term"
## [7] "threshold_day_90" "per_day_rent_AirBnB" "per_year_rent_AirBnB"
## [10] "rent_pressure_zone" "planning_permission" "month"
## [13] "count" "min_price" "mean_price"
## [16] "max_price"
In the final ‘large_df’ dataset, there are 144701 rows and 16 columns. Columns names are id, host_id, room_type, county, student_accomodation, term, threshold_day_90, per_day_rent_AirBnB, per_year_rent_AirBnB, rent_pressure_zone, planning_permission, month, count, min_price, mean_price, max_price.
## 'data.frame': 144701 obs. of 16 variables:
## $ id : Factor w/ 25515 levels "11532","24927",..: 3104 3104 3104 3104 3104 3104 3104 3104 3104 3104 ...
## $ host_id : Factor w/ 17020 levels "42928","43984",..: 4209 4209 4209 4209 4209 4209 4209 4209 4209 4209 ...
## $ room_type : Factor w/ 2 levels "Entire rental unit",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ county : Factor w/ 26 levels "Carlow","Cavan",..: 7 7 7 7 7 7 7 7 7 7 ...
## $ student_accomodation: logi FALSE FALSE FALSE FALSE FALSE FALSE ...
## $ term : Factor w/ 2 levels "long-term lease",..: 2 2 2 2 2 2 2 2 2 2 ...
## $ threshold_day_90 : Factor w/ 2 levels "over-90","under-90": 1 1 1 1 1 1 1 1 1 1 ...
## $ per_day_rent_AirBnB : Factor w/ 2 levels "AirBnB","Rent": 1 1 1 1 1 1 1 1 1 1 ...
## $ per_year_rent_AirBnB: Factor w/ 2 levels "AirBnB","Rent": 2 2 2 2 2 2 2 2 2 2 ...
## $ rent_pressure_zone : Factor w/ 2 levels "Non-RPZ","RPZ": 1 1 1 1 1 1 1 1 1 1 ...
## $ planning_permission : chr "Not Required" "Not Required" "Not Required" "Not Required" ...
## $ month : Factor w/ 12 levels "January","February",..: 10 3 8 6 1 2 9 12 11 5 ...
## $ count : int 13 29 1 2 20 6 11 21 30 1 ...
## $ min_price : int 380 380 380 380 380 380 380 380 380 380 ...
## $ mean_price : num 380 380 380 380 380 380 380 380 380 380 ...
## $ max_price : int 380 380 380 380 380 380 380 380 380 380 ...
## id host_id room_type county
## 11532 : 12 226804666: 2444 Entire rental unit:97971 Kerry :20848
## 27106 : 12 218736839: 948 Private room :46730 Donegal:17592
## 36950 : 12 105690532: 912 Galway :15802
## 44919 : 12 98759090 : 805 Dublin :15412
## 57442 : 12 148347815: 780 Cork :15086
## 88626 : 12 54449369 : 547 Mayo : 9914
## (Other):144629 (Other) :138265 (Other):50047
## student_accomodation term threshold_day_90
## Mode :logical long-term lease : 2969 over-90 :134155
## FALSE:142148 short-term lease:141732 under-90: 10546
## TRUE :2553
##
##
##
##
## per_day_rent_AirBnB per_year_rent_AirBnB rent_pressure_zone
## AirBnB:140843 AirBnB: 16962 Non-RPZ:96757
## Rent : 3858 Rent :127739 RPZ :47944
##
##
##
##
##
## planning_permission month count min_price
## Length:144701 March :14046 Min. : 1.00 Min. : 9.0
## Class :character June :13351 1st Qu.:24.00 1st Qu.: 70.0
## Mode :character February:13320 Median :30.00 Median :100.0
## May :13209 Mean :26.22 Mean :127.6
## January :13182 3rd Qu.:31.00 3rd Qu.:150.0
## April :12821 Max. :31.00 Max. :999.0
## (Other) :64772 NA's :309
## mean_price max_price
## Min. : 9.00 Min. : 9.0
## 1st Qu.: 70.93 1st Qu.: 75.0
## Median :104.00 Median :110.0
## Mean :131.09 Mean :138.6
## 3rd Qu.:154.29 3rd Qu.:163.0
## Max. :999.00 Max. :999.0
## NA's :309 NA's :309
| Field | Type | Description |
|---|---|---|
| id | integer | AirBnB’s unique identifier for the listing |
| host_id | integer | Host’s unique identifier |
| month | date | Month of the year |
| min_price | integer | Minimum price for that listing in that month |
| mean_price | integer | Mean price for that listing in that month |
| max_price | integer | Maximum price for that listing in that month |
| count | integer | Number of nights available in that month |
| county | text | County of AirBnB Listing |
| student_accomodation | logical | Whether TRUE or FALSE |
| room_type | logical | Room type: Entire rental unit, Private room, Shared room |
| threshold_day_90 | text | Whether over-90 or under-90 days |
| term | text | Whether the AirBnB listing is available for long-term lease or short-term lease |
| per_day_rent_AirBnB | text | Whether the property should be AirBnBed or rented our based on daily price |
| per_year_rent_AirBnB | text | Whether the property should be AirBnBed or rented our based on potential income |
In the final ‘df’ dataset, there are 17260 rows and 34 columns. Columns names are homeless_county, county_city, id, name, host_id, host_name, council, lea, latitude, longitude, room_type, price, minimum_nights, number_of_reviews, last_review, reviews_per_month, calculated_host_listings_count, availability_365, number_of_reviews_ltm, X, available_nights, county, student_accomodation, term, threshold_day_90, total_income, rent_price_per_month, number, rent_price_per_day, rent_price_per_year, per_day_rent_AirBnB, per_year_rent_AirBnB, rent_pressure_zone, planning_permission.
Because our dataset was has been merged with ‘available_nights_df’, as described above, our dataset has AirBnB listings only available from 23rd October 2021 to 21st October 2022. Any past AirBnB are not included in our dataset.
## homeless_county county_city
## Kerry :2396 County Kerry :2396
## Dublin :2230 Dublin City :2230
## Donegal/Leitrim :2201 County Donegal:1951
## Galway (Galway City and County councils):1885 County Cork :1560
## Cork (Cork City and County councils) :1815 County Galway :1300
## Mayo/Roscommon :1332 County Mayo :1154
## (Other) :5401 (Other) :6669
## id name host_id host_name
## 11532 : 1 Length:17260 226804666: 204 Length:17260
## 24927 : 1 Class :character 98759090 : 81 Class :character
## 27106 : 1 Mode :character 218736839: 79 Mode :character
## 36950 : 1 105690532: 76
## 40176 : 1 148347815: 65
## 42037 : 1 54449369 : 52
## (Other):17254 (Other) :16703
## council lea latitude longitude
## Length:17260 Length:17260 Min. :51.43 Min. :-10.463
## Class :character Class :character 1st Qu.:52.23 1st Qu.: -9.431
## Mode :character Mode :character Median :53.27 Median : -8.467
## Mean :53.14 Mean : -8.266
## 3rd Qu.:53.72 3rd Qu.: -7.050
## Max. :55.38 Max. : -6.014
##
## room_type price minimum_nights number_of_reviews
## Entire rental unit:11438 Min. : 9.0 Min. : 1.00 Min. : 0.00
## Private room : 5822 1st Qu.: 70.0 1st Qu.: 1.00 1st Qu.: 4.00
## Median : 100.0 Median : 2.00 Median : 18.00
## Mean : 130.8 Mean : 4.58 Mean : 44.54
## 3rd Qu.: 150.0 3rd Qu.: 3.00 3rd Qu.: 53.00
## Max. :2057.0 Max. :365.00 Max. :1331.00
##
## last_review reviews_per_month calculated_host_listings_count
## Length:17260 Min. : 0.010 Min. : 1.000
## Class :character 1st Qu.: 0.400 1st Qu.: 1.000
## Mode :character Median : 0.920 Median : 2.000
## Mean : 1.404 Mean : 7.345
## 3rd Qu.: 1.880 3rd Qu.: 3.000
## Max. :76.130 Max. :204.000
## NA's :1873
## availability_365 number_of_reviews_ltm X available_nights
## Min. : 0.0 Min. : 0.000 Min. : 1 Min. : 1.0
## 1st Qu.:113.0 1st Qu.: 0.000 1st Qu.: 4546 1st Qu.:113.0
## Median :238.0 Median : 5.000 Median : 9098 Median :238.0
## Mean :219.8 Mean : 9.636 Mean : 9099 Mean :219.8
## 3rd Qu.:337.0 3rd Qu.: 13.000 3rd Qu.:13667 3rd Qu.:337.0
## Max. :365.0 Max. :321.000 Max. :18169 Max. :365.0
##
## county student_accomodation term threshold_day_90
## Kerry :2396 Mode :logical long-term lease : 392 over-90 :13508
## Dublin :2230 FALSE:17039 short-term lease:16868 under-90: 3752
## Donegal:1951 TRUE :221
## Galway :1885
## Cork :1815
## Mayo :1154
## (Other):5829
## total_income rent_price_per_month number rent_price_per_day
## Min. : 0 Min. : 744 Min. : 12 Min. : 8.153
## 1st Qu.: 9960 1st Qu.: 974 1st Qu.: 43 1st Qu.: 16.241
## Median : 21500 Median :1045 Median : 94 Median : 29.030
## Mean : 28899 Mean :1340 Mean : 688 Mean : 33.473
## 3rd Qu.: 37563 3rd Qu.:1443 3rd Qu.: 254 3rd Qu.: 35.638
## Max. :199925 Max. :9667 Max. :4432 Max. :317.819
##
## rent_price_per_year per_day_rent_AirBnB per_year_rent_AirBnB
## Min. : 2976 AirBnB:16810 AirBnB: 4240
## 1st Qu.: 5928 Rent : 450 Rent :13020
## Median : 10596
## Mean : 12218
## 3rd Qu.: 13008
## Max. :116004
##
## rent_pressure_zone planning_permission
## Non-RPZ:10987 Length:17260
## RPZ : 6273 Class :character
## Mode :character
##
##
##
##
| Field | Type | Description |
|---|---|---|
| id | integer | AirBnB’s unique identifier for the listing |
| name | text | Title of the property on AirBnB |
| host_id | interger | AirBnB’s unique identifier for the host |
| host_name | text | Host’s name |
| lea | text | Local Electoral Areas (LEAs) |
| council | text | County or City Council |
| county | text | County of the AirBnB Listing |
| latitude | numeric | Uses the World Geodetic System (WGS84) projection for latitude and longitude |
| longitude | numeric | Uses the World Geodetic System (WGS84) projection for latitude and longitude |
| room_type | string | Entire rental unit, Private room, Shared room, Hotel room |
| price | currency | Daily price in local currency |
| minimum_nights | integer | minimum number of night stay for the listing (calendar rules may be different) |
| number_of_reviews | integer | The number of reviews the listing has |
| last_review | date | The date of the last/newest review |
| calculated_host_listings_count | integer | The number of listings the host has in the current scrape, in the city/region geography |
| availability_365 | integer | availability_x. The availability of the listing x days in the future as determined by the calendar. Note a listing may be available because it has been booked by a guest or blocked by the host |
| number_of_reviews_ltm | integer | The number of reviews the listing has (in the last 12 months) |
| student_accomodation | logical | Whether TRUE or FALSE |
| total_income | interger | AirBnB listings potential total income (available nights * price) |
| threshold_day_90 | text | Whether over-90 or under-90 days |
| term | text | Whether the AirBnB listing is available for long-term lease or short-term lease |
| per_day_rent_AirBnB | text | Whether the property should be AirBnBed or rented our based on daily price |
| per_year_rent_AirBnB | text | Whether the property should be AirBnBed or rented our based on potential income |
Comment: It is clear from this graph that there are some parts of Ireland that have more AirBnB listings than others. It is easy to see that there are more properties available on the coast than inland.
Comment: It was surprising to see that Kerry has more AirBnB listings available than Dublin. It is also important to note that the first seven in the table (except for Dublin) are all on the Wild Atlantic Way.
Comment: Even though Kerry has more options for accomondation than Dublin, it is also more expensive.
Comment: There are less AirBnB listings available in the summer, than the winter. However, it is possible that the AirBnB listings are not yet for the summer.
Comment: By clicking on different counties, it is possible to see the difference between counties on types of accommodation available. Dublin has more private rooms available than entire rental units. However, in Galway and Cork, there are more entire rental units available than private rooms.
Comment: It is possible to select the same county in the two graphs above and compare. For example, Dublin has more entire rental units than private rooms, entire rental units are more expensive than private rooms.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment: It is interesting to compare AirBnB listings for each month and county. Big cities like Dublin, Cork, Galway and Limerick, including Kerry, have less AirBnB listings in teh summer. It is unclear why this is the case, considering more tourists come to Ireland during the summer.
The initial examination of the data, shows that there are more AirBnB Listing in Kerry than Dublin. Top 7 county with AirBnB listings are on the Wild Atlantic Way. The map of Ireland shows the density of the number of listings on the coast. For some reason, there are less AirBnB listings in the summer than the winter. Number of room types differs depedning on the county. Dublin City, Cork City and Galway City, The county breakdown examination shows no difference in price or mininum nights required to stay regardless of room type.
Comment: Map of Ireland represents the density of AirBnB listings, highlighting the areas that are in RTZs (in red). Athough Dublin City, Cork City and Galway City are all in RTZs, it is possible to see the huge amount of AirBnB listings available, which can be affecting the Irish Housing Crisis.
Comment: There are more entire rental units and private rooms available outside of RTZs than there are in the RTZs.
Comment: Table above is summarised with this graph. There are more entire rental units and private rooms available outside of RTZs than there are in the RTZs. However, this could be due to fact that there are more houses in general outside the RTZs than inside the RTZs, which would show more AirBnB listings outside RTZs than inside RTZs.
Comment: Although, there is a difference between entire rental unit and private/shared room on price, there is no big difference between renting private/shared room inside or outside the RTZ. However, an entire rental unit is slightly more expensive in RTZs than outside RTZs.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment: In the table above, number of listings is summarised by RTZ and month.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment: In the graph above visusalises the table above. As seen above, there are overall less AirBnB listings in RTZs than in Non-RTZs. Furthermore, the trend follows for the month: less AirBnBs are available during the summer than in the winter.
Map of Ireland shows that there are a lot of AirBnB listings in RTZs, which would affect the number of accommodation available for the housing market, to buy or to rent. There are as many entire rental units as private rooms in RTZs. There are more entire rental units outside of RTZs because there are more areas not in RTZs than there are in RTZs. At first glance, due to the amount of AirBnB listings in RTZs, it could be argued to the government that it could potentially reduce the pressure on the Irish housing market and reduce the Housing Crisis in RTZs.
A new dataset was created where AirBnB listings were selected that offered entire rental unit. This new dataset was used for this section of the report.
Comment: Kerry and Donegal have more entire rental units than other counties. Dublin is only 5th highest, while Cork and Galway are in 3rd and 4th place.
Comment: When Kerry was examined, 326 AirBnB listings are in the RTZ, while the rest is outside the RTZ. Both County Galway and County Cork have AirBnB listings in RTZ and outside of it. All Dublin City AirBnBlistings, Cork City AirBnB listings and Galway City AirBnB listings is in the RTZ.
## `summarise()` has grouped output by 'county'. You can override using the `.groups` argument.
Comment:
It is visible that a lot of properties are not available all year around. Unfortunately, no reason is provided why the property is unavailable.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment: In the table above, number of listings of entire rental units is summarised by RTZ and month.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment:
This graph shows less entire rental units available during summer months in RTZs and Non-RTZs. It is still unclear why.
Comment: When comparing daily rent rate and daily AirBnB, for most properties, it is more profitable to AirBnB.
Comment: The table above the shows the breakdown of which entire rental units should be rented out or leased out as AirBnB, when only the daily price and daily rent rate is to be considered.
Comment: However, when comparing total potential income (available nights * price) and annual income (rent_in_ireland.csv * 12), it seems that most landlords are missing out on the potential annual rent. THis could be due to the fact that the rental unit is not available all year around.
Comment: The table above the shows the breakdown of which entire rental units should be rented out or leased out as AirBnB, when only the daily price and daily rent rate is to be considered.
As previously stated, homeowners in RTZs (RPZs) are required to apply for planning permission if they let out their entire home (principal private residence) for short-term lets of more than 90 days in total while they are away. Principal private residence is the place where one ordinarily live.
Comment: There are very small amount of properties in the Rent Pressures Zones that are over 90 day threshold that would require planning permission.
Comment: Summary of the graph above, there are very small amount of properties in the Rent Pressures Zones that are over 90 day threshold that would require planning permission.
Comment: Entire rental units available in RTZs are more expensive than outside of RTZs. There is a slight difference between price between short-term lease and long-term lease.
Comment: There seems to be a difference in mininum nights to stay in Entire rental units available in RTZs are more expensive than outside of RTZs. Short-term lease is up to 15 days, so that is why is very small window of stay.
There is more entire rental units in Kerry than in other places in Ireland. When availability was examined, it was clear that not all entire rental units were available all year around. When examining the months of year, it is clear that there are less entire rental units available in the summer than other times of the year. It is unclear why this occurs and what is the landlord’s motivation behind this. Majority of stays of entire rental units are available for short-term stays (mininum nights under 14 days) and availability for the year is below 90 days. In RTZs, there are only 2,356 properties that require planning permission (availability over 90 days in the year and in RTZs). This would mean that there are over 2,000 properties that could be placed into long-term rental market to ease the Housing Crisis in Ireland. Analysis of potential income from rent vs AirBnB shows that most of the AirBnB earn less than the potential rental annual income. Of course, this is because most entire rental units on AirBnB are not available all year around, motivation for this is unclear.
A new dataset was created where AirBnB listings were selected that offered private rooms in a shared house. This new dataset was used for this section of the report.
Comment: Dublin has the most number of private rooms available, all of which are in the RTZ. However, the next three in the RTZ are: Kerry, Cork City and Galway City.
Comment: There are no visible difference between prices of private room AirBnB listings regardless of whether the AirBnB is in RTZ or County.
Comment: There are no visible difference between minimum nights required to stay in private room AirBnB listings regardless of whether the AirBnB is in RTZ or County.
Comment: When comparing daily rent rate and daily AirBnB, for most properties, it is more profitable to AirBnB.
Comment: However, when comparing total potential income (available nights * price) and annual income (rent_in_ireland.csv * 12), it seems that most landlords are missing out on the potential annual rent. THis could be due to the fact that the rental unit is not available all year around.
Comment: Above Map of Ireland, shows the availability of private rooms. It seems that there are a lot of private rooms that are not available all year around.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment: The graph above shows that regardless of RTZs, there are still less availability during the summer than winter.
## `summarise()` has grouped output by 'month'. You can override using the `.groups` argument.
Comment: In the table above, number of listings of private rooms is summarised by RTZ and month. A table of above illustration.
As previously stated, homeowners in RTZs (RPZs) are required to apply for planning permission if they let out their entire home (principal private residence) for short-term lets of more than 90 days in total while they are away. Principal private residence is the place where one ordinarily live. However, there is no threshold for private rooms. It is still interesting to examine this relationship
Comment: There are 2,124 private rooms that are available over 90 days in RTZs. If the same rules were applied to private rooms as entire rental units, then these properties would require planning permission.
Comment: There are absolutely no difference between private room listings inside and outside RTZs and term type (under/over-90). This means that regardless of nights stayed in RTZs, the price is very similar.
In a lot of counties, there are as many private rooms as there are entire rental units. Dublin has the most number of private rooms, all of which are in the RTZ. There are no planning permission required for long-term stays in RTZs with availability for over-90 days. In RTZs, there are only 3,011 private rooms available on AirBnB, while there are 3,152 private rooms outside RTZs. Most of the properties in Rent Pressure could be placed into long-term rental market to ease the Housing Crisis in Ireland. Analysis of potential income from rent vs AirBnB shows that most of the AirBnB earn less than the potential rental annual income. Of course, this is because most entire rental units on AirBnB are not available all year around, motivation for this is unclear.
There are 2,124 private rooms that are available over 90 days in RTZs. If the same rules were applied to private rooms as entire rental units, then these properties would require planning permission. Identifying this should help lobbyists of change to regulations to include private rooms in their cut-offs.
A new dataset was created where 5 AirBnB hosts with the most properties were selected. This new dataset was used for this section of the report.
## `summarise()` has grouped output by 'host_id'. You can override using the `.groups` argument.
Comment: Table above examines the AirBnB listings by counting the number of listings in RTZs for each host, ordering it in ascending order. One hosts has over 200 AirBnB listings.
Comment: Map of Ireland examines the location of AirBnB listings in RTZs for those Top hosts. By double clicking on the id in the legend, it possible to just select one host and examine the location of their AirBnBs in RTZs. Some hosts has several AirBnB listings in different counties. It is unclear how they manage their properties for AirBnB.
Comment: Dublin City has the most AirBnB hosts with properties regardless of room type. There are also more private rooms than entire rental units. Galway City and Cork City also have hosts that have many AirBnB listings. However, there are more entire rental units than private rooms in those cities.
There are individuals who hold a lot of property in RTZs. It is unclear how those individuals manage their properties around Ireland. It could be suggested that having too many properties on AirBnB should be part of planning permission. This would allow landlords to have constant tenants and not worry about managing their AirBnB properties around Ireland.
A new dataset was created where AirBnB listings were selected that offered student accommodation. This new dataset was used for this section of the report.
Comment: Table above shows the summary of accomodation for students by county. Galway City and Cork City have the highest mean rates, even higher than Dublin.
Comment: Although Galway City and Cork City are the most expensive for student accommodation, there is still more listings for Dublin City. There is only one Clare listing targetting students
Comment: AirBnB listings, that contain ‘student’ in name/description, have property in Dublin City, Cork City and Galway City.
Comment: By double clicking on the host_id in the legend, it is clear tha the host with host_id ‘226804666’ has property in Dublin, Cork and Galway.
Comment: There are 176 private rooms available in Dublin, comparing to four entire rental units targeting students in Dublin. Cork City and Galway City have more private rooms than entire renal units.
## `summarise()` has grouped output by 'room_type'. You can override using the `.groups` argument.
## `summarise()` has grouped output by 'county'. You can override using the `.groups` argument.
There are a lot of AirBnB listings targetting students in Dublin, however, Cork City and Galways City charge students more for this service, based on average. One hosts has 216 listings that target student, ranging in location. It is unclear why this host does not advertise on Daft.ie as long-term student accomodation. Most of the listings that taget students are private rooms, with very slim amount are entire rental units. It is unclear of the size of these entire rental units and why the listing is not on Daft.ie. It has also been shown that it is more profitable to rent the properties, in all but 5 properties. It could be argued that these listings should be on daft.ie advertised to students, not on AirBnB for short-term lease.
Comment: Above graph examines the number of homeless in each county or region, as reported by the government. Dublin has the highest number of homeless people than any other county or region.
Comment: When comparing AirBnB listing in the same county or region, it is clear that it is possible to place all homeless individuals into AirBnBs listings if these Listings became available for long-term lease.
There are concerns that AirBnB listings are reducing the supply of long-term leases in RPZs, which was shown to be true. The regulation that is being put forward by the government to dramatically decrease the number of AirBnB listings of entire rental units is very useful, however, this should also apply to private rooms in RPZs, which can be used by college students and young professionals. Entire rental units can be used by families or couples for long-term rent. Furthermore, it is unclear why the landlords choose to put their property on AirBnB when it has been showen that it is more profitable to rent the property when comparing potential AirBnB earning for the year (available nights * daily price) and potential annual rent earnings (rent per month * 12).
As previously stated, a lot of listings were placed as long-term listings when the pandemic hit, hopefully reducing the pressure on the housing crisis. However, as we continue to come out of the pandemic, we should worry about the return of lack of accommodation in RPZs because of tourist season and increase in AirBnB listings.
Data Although there were 34 columns of data in the final data, there are a few vital piece of information are missing. There are entire rental units (houses or apartments) that available for over 90 days of the year in Rent Pressurised Areas, which would require a planning permission. However, this poses a different question: - Why don’t AirBnB hosts have their properties available all year around? - Why do AirBnB hosts choose to place their property on AirBnB and not do long-term leasing? - Should the government create incentives for AirBnB hosts to lease their property for long-term? - Based on above question, perhaps, the government should review obstacles of long-term leasing.
Licence / Planning Permission After reading Data Dictionary provided AirBnB, it is unclear what is meant by column ‘licence’ in the AirBnB data. Data analysis at the beginning showed that there are no values in column ‘licence’ and it was dropped from analysis. However, this raises concerns that it be referring to the planning permission required by the local authorities from hosts in RPZ. Lack of planning permissions from the local authorities should be examined. AirBnB should seek planning permissions from their hosts if they meet the criteria for planning permission.
Solving the Homelessness Issue in Ireland Although the homeless data was used as an example of using AirBnB listings as long-term rental units, it is still flawed. A fraction of homeless individuals have addiction or mental health issues, for which they seek support for in homeless charities such as Simon Community and Focus Ireland. These charities have specific housing for individuals who require extra support in their permanent homes. This would mean that simply placing them on their own into a house supplied from AirBnB would not solve the underlying issues but just place them into further isolation.
However, it is clear that properties that are on AirBnB could have huge potential to reduce the pressure on the Housing Crisis. Reduction of entire rental units and private rooms available on AirBnB could help to increase the number of properties available in RPZs for long-term rental for young families and students. This could reduce the rent for all residents in RPZ as more rental units are available and stabilise the rental markets.
Burke, C. (2021) Rents continue to rise across Ireland as number of rental homes available hits ‘all-time low’, TheJournal.ie. Available at: https://www.thejournal.ie/daft-rental-report-all-time-low-5596453-Nov2021/ (Accessed: 17 December 2021).
Burke-Kennedy, E. (2021) Airbnb exodus increases stock of rental property in Dublin by 90%, The Irish Times. Available at: https://www.irishtimes.com/business/economy/airbnb-exodus-increases-stock-of-rental-property-in-dublin-by-90-1.4654155 (Accessed: 17 December 2021).
Citizensinformation.ie (no date) Renting your property for short-term lets. Citizensinformation.ie. Available at: https://www.citizensinformation.ie/en/housing/owning_a_home/home_owners/renting_your_property_for_shortterm_lets.html (Accessed: 17 December 2021).
Department of Housing, Local Government and Heritage (2021) Homeless Report - September 2021. Available at: https://www.gov.ie/en/publication/0d7a7-homeless-report-september-2021/ (Accessed: 19 December 2021).
Lyons, R. (2021) Irish Rental Report Q2 2021. Available at: https://ww1.daft.ie/report/ronan-lyons-2021q2-daftrentalprice?d_rd=1 (Accessed: 17 December 2021).
McGrath, D. (2021) Number of homeless people in Ireland rises for third month in a row – 8,212 adults and children now without home, Independent. Available at: https://www.independent.ie/irish-news/number-of-homeless-people-in-ireland-rises-for-third-month-in-a-row-8212-adults-and-children-now-without-home-40885752.html (Accessed: 19 December 2021).
Pope, C. (2021) New restrictions likely to reduce supply of short-term rental property, The Irish Times. Available at: https://www.irishtimes.com/business/new-restrictions-likely-to-reduce-supply-of-short-term-rental-property-1.4653404 (Accessed: 17 December 2021).
Residential Tenancies Board (2021) What are Rent Pressure Zones (RPZ)? Available at: https://www.rtb.ie/during-a-tenancy/rent-review-in-a-rent-pressure-zone-rpz?gclid=Cj0KCQiAzfuNBhCGARIsAD1nu-8YhjJPsVbhgWjuM0et4lZX2ansT4b4XkLEEx9G63vDiVsptSzv8toaAkdDEALw_wcB (Accessed: 19 December 2021).